home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / ada / gwuada_9.zip / TASKING.H < prev    next >
Text File  |  1992-10-05  |  6KB  |  189 lines

  1. /*
  2.  * Copyright (C) 1985-1992  New York University
  3.  * 
  4.  * This file is part of the Ada/Ed-C system.  See the Ada/Ed README file for
  5.  * warranty (none) and distribution info and also the GNU General Public
  6.  * License for more details.
  7.  
  8.  */
  9. /* GLOBAL DECLARATIONS */
  10.  
  11. #define TRACE 
  12. #define time_slice 50
  13.  
  14. /* Macros used to access tasks stacks and stacks pointers */
  15.  
  16. #define ORIG(task)                original_task[task & TMASK]
  17. #define STACK(task)               stack_segments[task & TMASK]
  18. #define STACKPTR(task)            task_stackptr[task & TMASK]
  19.  
  20. #define NULL_BROTHER    -2
  21.  
  22. /* Macros used to access TCB fields in current task */
  23.  
  24. #define MY_TCB              ((struct tcb_type *)cur_stack)
  25. #define WORDS_TCB ((sizeof(struct tcb_type)-sizeof(struct entry_type)) \
  26.                 /(sizeof(int)))
  27. #define WORDS_ENT              6
  28. #define REAL_ENT              ((sizeof(struct entry_type))/(sizeof(int)))
  29. #define TCB(task)          ((struct tcb_type *)stack_segments[task & TMASK])
  30.  
  31. /* Macros used to access TCB fields in current task */
  32.  
  33. #define MY_ABNORMAL       MY_TCB->tcb_abnormal
  34. #define MY_ACTION         MY_TCB->tcb_action
  35. #define MY_BROTHER      MY_TCB->tcb_brother    
  36. #define MY_BLOCK_PTR      MY_TCB->tcb_block_ptr   
  37. #define MY_CURR_ENTRY      MY_TCB->tcb_curr_entry
  38. #define MY_ENTRY_ITEM      MY_TCB->tcb_entry_item
  39. #define MY_EVENT      MY_TCB->tcb_event 
  40. #define MY_EXCEPTION        MY_TCB->tcb_exception   
  41. #define MY_FIRST      MY_TCB->tcb_first
  42. #define MY_ID              MY_TCB->tcb_id   
  43. #define MY_IO_ITEM      MY_TCB->tcb_io_item   
  44. #define MY_MASTER_TASK      MY_TCB->tcb_master_task
  45. #define MY_MASTER_BLOCK      MY_TCB->tcb_master_block
  46. #define MY_NEXT            MY_TCB->tcb_next    
  47. #define MY_NOT_TERM      MY_TCB->tcb_not_term    
  48. #define MY_NUM_ITEMS      MY_TCB->tcb_num_items
  49. #define MY_NUM_NOTERM        MY_TCB->tcb_num_noterm
  50. #define MY_NUM_DEPS       MY_TCB->tcb_num_deps
  51. #define MY_NUM_ENTRIES    MY_TCB->tcb_num_entries
  52. #define MY_NUM_EVENTS        MY_TCB->tcb_num_events
  53. #define MY_PARENT        MY_TCB->tcb_parent
  54. #define MY_PRIO          MY_TCB->tcb_prio
  55. #define MY_RDV        MY_TCB->tcb_rdv
  56. #define MY_RTS_ITEM        MY_TCB->tcb_rts_item  
  57. #define MY_SAVE_PRIO       MY_TCB->tcb_save_prio
  58. #define MY_SERVICED        MY_TCB->tcb_serviced
  59. #define MY_STATUS        MY_TCB->tcb_status 
  60. #define MY_TBASE      MY_TCB->tcb_tbase
  61. #define MY_TOFF            MY_TCB->tcb_toff
  62. #define MY_WHAT        MY_TCB->tcb_what
  63. #define MY_WHO        MY_TCB->tcb_who
  64. #define MY_ENTRY(i)   (struct entry_type *) (&(MY_TCB->tcb_entry)+(i-1))
  65.  
  66. /* Macros used to access TCB fields in another task */
  67.  
  68. #define TCB_ABNORMAL(task)       TCB(task)->tcb_abnormal
  69. #define TCB_ACTION(task)      TCB(task)->tcb_action
  70. #define TCB_BROTHER(task)      TCB(task)->tcb_brother 
  71. #define TCB_BLOCK_PTR(task)      TCB(task)->tcb_block_ptr   
  72. #define TCB_CURR_ENTRY(task)      TCB(task)->tcb_curr_entry   
  73. #define TCB_ENTRY_ITEM(task)      TCB(task)->tcb_entry_item   
  74. #define TCB_EVENT(task)          TCB(task)->tcb_event
  75. #define TCB_EXCEPTION(task)        TCB(task)->tcb_exception   
  76. #define TCB_FIRST(task)          TCB(task)->tcb_first
  77. #define TCB_ID(task)              TCB(task)->tcb_id   
  78. #define TCB_IO_ITEM(task)      TCB(task)->tcb_io_item   
  79. #define TCB_MASTER_TASK(task)      TCB(task)->tcb_master_task    
  80. #define TCB_MASTER_BLOCK(task)      TCB(task)->tcb_master_block   
  81. #define TCB_NEXT(task)            TCB(task)->tcb_next    
  82. #define TCB_NUM_ITEMS(task)        TCB(task)->tcb_num_items
  83. #define TCB_NUM_NOTERM(task)        TCB(task)->tcb_num_noterm
  84. #define TCB_NUM_DEPS(task)       TCB(task)->tcb_num_deps
  85. #define TCB_NUM_ENTRIES(task)        TCB(task)->tcb_num_entries
  86. #define TCB_NUM_EVENTS(task)        TCB(task)->tcb_num_events
  87. #define TCB_PARENT(task)        TCB(task)->tcb_parent
  88. #define TCB_PRIO(task)        TCB(task)->tcb_prio
  89. #define TCB_RDV(task)            TCB(task)->tcb_rdv
  90. #define TCB_RTS_ITEM(task)        TCB(task)->tcb_rts_item
  91. #define TCB_SAVE_PRIO(task)      TCB(task)->tcb_save_prio
  92. #define TCB_SERVICED(task)        TCB(task)->tcb_serviced
  93. #define TCB_STATUS(task)        TCB(task)->tcb_status 
  94. #define TCB_TBASE(task)          TCB(task)->tcb_tbase
  95. #define TCB_TOFF(task)          TCB(task)->tcb_toff 
  96. #define TCB_WHAT(task)        TCB(task)->tcb_what
  97. #define TCB_WHO(task)            TCB(task)->tcb_who
  98. #define TCB_ENTRY(task,i)         (struct entry_type *)(&(TCB(task)->tcb_entry)\
  99.                     + (i-1))
  100.  
  101. /* Macros for accessing entry structure */
  102.  
  103. #define ENTRY_COUNT(e)        (e)->count
  104. #define ENTRY_FIRST(e)        (e)->first
  105. #define ENTRY_LAST(e)        (e)->last
  106. #define ENTRY_GUARD(e)        (e)->guard
  107. #define ENTRY_ADD_LOCK(e)    (e)->lock.add_lock
  108. #define ENTRY_DEL_LOCK(e)    (e)->lock.del_lock
  109. #define EMPTY        -1     /* value of EMPTY CHAIN */
  110.  
  111. /* Macros for accessing io_items */
  112.  
  113. #define II_FLAG(i)        (i)->flag
  114. #define II_TASK(i)        (i)->task
  115. #define II_DELTA(i)        (i)->delta
  116. #define II_NEXT(i)        (i)->next
  117.  
  118. /* Macros for accessing entry queue items */
  119.  
  120. #define ITEM_FLAG(i)        (i)->flag
  121. #define ITEM_TASK(i)        (i)->task
  122. #define ITEM_NEXT(i)        (i)->next
  123.  
  124. /* Macros for rts items */
  125.  
  126. #define RTS_PARENT(i)        (i)->parent
  127. #define RTS_MULT(i)        (i)->mult
  128. #define RTS_SAVE_MULT(i)        (i)->save_mult
  129. #define RTS_TCBS(i,j)        (i)->tcbs[j]
  130. #define RTS_TYPE(i)        (i)->type
  131. #define RTS_PRIO(i)        (i)->prio
  132. #define RTS_TF(i)        (i)->tf
  133. #define RTS_TEMPL_BASE(i)    (i)->templ_base
  134. #define RTS_TEMPL_OFF(i)    (i)->templ_off
  135. #define RTS_MASTER_TASK(i)    (i)->master_task
  136. #define RTS_MASTER_BLOCK(i)    (i)->master_block
  137. #define RTS_NEXT(i)        (i)->next
  138.  
  139. /* Status values */
  140.  
  141. #define ACTIVE          0
  142. #define ACTIVATING      1
  143. #define CALLING_RDV      2
  144. #define TIMED_RDV      3
  145. #define SELECTING_NOTERM  4
  146. #define SELECTING_TERM      5
  147. #define COMPLETE_BLOCK    6
  148. #define COMPLETED      7
  149. #define TERMINATED      8
  150. #define ABNORMAL      9
  151. #define WAIT             10
  152. #define QUIESCENT        11
  153.  
  154. /* Definition of events */
  155.  
  156. #define TERMINATE_EVENT  -1
  157. #define ENDRDV_EVENT     -2
  158. #define TASKERR_EVENT     -3
  159. #define NO_EVENT     -4
  160. #define RDV_EVENT        -5
  161. #define DISABLED_EVENT   -6
  162. #define ABORT_EVENT     -7
  163. #define TIMER_EVENT     -8
  164. #define PROGERR_EVENT     -9
  165.  
  166.  
  167. /* Definition of action codes */
  168.  
  169. #define NO_ACTION     1
  170. #define ABORT_ONE    2
  171. #define FREE_TASK_SPACE    3
  172. #define COMPLETE_TASK_ONE     4
  173. #define COMPLETE_BLOCK_ONE    5
  174. #define COMPLETE_BLOCK_TWO    6
  175. #define ENTRY_CALL    7
  176. #define SELECTIVE_WAIT    8
  177. #define TERM_WAVE    9
  178. /* #define WAIT        10        -- already defined as a status -- */
  179. #define DONE_ACTIVATION 11
  180. #define DONE_CREATION    12
  181. #define CONTEXT_SWITCH    13
  182. #define ACTIVATE_SELF    14
  183.  
  184. /* Definition of actions of RTS items */
  185.  
  186. #define ACTIVATE    1
  187. #define CREATE        2
  188. #define READY        3
  189.